package cn.lingyangwl.agile.pay.pay.controller.qr;

import cn.lingyangwl.agile.pay.pay.model.rqrs.cashier.CashierChannelUserRQ;
import cn.lingyangwl.agile.pay.pay.model.rqrs.cashier.CashierPayRQ;
import cn.lingyangwl.agile.pay.pay.model.rqrs.cashier.CashierRedirectRQ;
import cn.lingyangwl.framework.core.response.Resp;
import cn.lingyangwl.agile.common.security.annotation.Anonymous;
import cn.lingyangwl.agile.pay.pay.process.qr.QrCashierProcess;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * 聚合码支付二维码收银台controller <br/>
 *
 * 聚合二维码总共分为两类, 一类是动态的支付金额, 一个是静态支付金额, 比如如下两个场景 <br/>
 * 静态的支付金额 <br/>
 * 1. 某用户在某商城网站选择要购买的商品时候, 这时候可以选择聚合支付, 但是这个聚合支付的订单要事先生成且 <br/>
 * 不能让用户手动修改支付金额
 *
 * 动态的支付金额
 * 1. 线下门店, 用户扫描聚合支付二维码, 然后输入店家告诉的需要支付金额
 * @author shenguangyang
 */
@Slf4j
@RestController
@Anonymous
@RequestMapping("/cashier")
public class QrCashierController {
    @Resource
    private QrCashierProcess qrCashierProcess;

    /**
     * 返回 oauth2【获取uerId跳转地址】
     */
    @PostMapping("/redirectUrl")
    public Resp<?> redirectUrl(@RequestBody CashierRedirectRQ req) {
        return qrCashierProcess.redirectUrl(req);

    }

    /**
     * 获取userId
     */
    @PostMapping("/channelUserId")
    public Resp<?> channelUserId(@RequestBody CashierChannelUserRQ req) {
        return qrCashierProcess.channelUserId(req);
    }


    /**
     * 获取订单支付信息
     */
    @PostMapping("/payOrderInfo")
    public Resp<?> payOrderInfo(@RequestParam("token") String token) throws Exception {
        return qrCashierProcess.payOrderInfo(token);
    }


    /**
     * 调起下单接口, 返回支付数据包
     */
    @PostMapping("/pay")
    public Resp<?> pay(@RequestBody @Validated CashierPayRQ req) throws Exception {
        return qrCashierProcess.pay(req);
    }
}
